JDK中的tools.jar包中包含了可以动态连接到正在运行的JVM的Attach API。JRockit Mission Control使用Attach API来检测本地系统中正在运行的JVM,以及调用相关的诊断命令。
启动JVM时,会在系统变量所制定的临时目录中创建进程说明文件。JRCMD使用这些文件和Attach API来查找当前用户所运行的JVM实例。为了安全起见,Attach API依赖于文件系统对进程说明文件的访问权限的控制,也就是说,如果临时目录位于一个不安全的文件系统(例如FAT),则JRCMD就无法正常工作。另外,安全限制还要求,JRCMD的用户和JVM进程的启动者必须是同一人,于是乎造成的一个问题是,在Windows系统上,若将Java程序设定为系统服务,则无法通过JRCMD访问到该进程。
如果以root用户启动JRockit进程,而后又将自身降为低权限用户,则由于安全策略的限制,JRCMD可能无法连接到之前启动的Java进程。使用root账户可以列出JVM进程,但以root账户发送的任何诊断命令都会被解释为SIGQUIT
信号,并打印线程转储信息。低权限用户可能无法列出JVM进程,但如果知晓目标JVM进程号,则依然可以向其发送诊断命令。
本章余下的内容会对常用的诊断命令做详细介绍。